Micron Document
🎖️GitЯра🎖️

Node / meshcore / MeshCore / files / src / helpers / esp32 / SerialBLEInterface.cpp

Displaying Raw • Download

src/helpers/esp32/SerialBLEInterface.cpp 890a2e2cffa98dea3ca88db3c3aba72ef23ff3f7 (890a2e2c) Text, 7.66 KB

Tff7b72#Tff7b72include T8b949e"SerialBLEInterface.h"
Tff7b72#Tff7b72include T8b949e"esp_mac.h"

T8b949e// See the following for generating UUIDs:
T8b949e// https://www.uuidgenerator.net/

Tff7b72#Tff7b72define SERVICE_UUID "6E400001-B5A3-F393-E0A9-E50E24DCCA9E" T8b949e// UART service UUID
Tff7b72#Tff7b72define CHARACTERISTIC_UUID_RX "6E400002-B5A3-F393-E0A9-E50E24DCCA9E"
Tff7b72#Tff7b72define CHARACTERISTIC_UUID_TX "6E400003-B5A3-F393-E0A9-E50E24DCCA9E"

Tff7b72#Tff7b72define ADVERT_RESTART_DELAY 1000 T8b949e// millis

Tffa657void Td2a8ffSerialBLEInterface::beginTb4b4b4(Tff7b72const Tffa657charTff7b72* Te6edf3prefixTb4b4b4, Tffa657charTff7b72* Te6edf3nameTb4b4b4, Tffa657uint32_t Te6edf3pin_codeTb4b4b4) Tb4b4b4{
Te6edf3_pin_code Tff7b72= Te6edf3pin_codeTb4b4b4;

Tff7b72if Tb4b4b4(Te6edf3strcmpTb4b4b4(Te6edf3nameTb4b4b4, Ta5d6ff"Ta5d6ff@@MACTa5d6ff"Tb4b4b4) Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{
Tffa657uint8_t Te6edf3addrTb4b4b4[T79c0ff8Tb4b4b4]Tb4b4b4;
Te6edf3memsetTb4b4b4(Te6edf3addrTb4b4b4, T79c0ff0Tb4b4b4, Tff7b72sizeofTb4b4b4(Te6edf3addrTb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3esp_efuse_mac_get_defaultTb4b4b4(Te6edf3addrTb4b4b4)Tb4b4b4;
Te6edf3sprintfTb4b4b4(Te6edf3nameTb4b4b4, Ta5d6ff"Ta5d6ff%02X%02X%02X%02X%02X%02XTa5d6ff"Tb4b4b4, T8b949e// modify (IN-OUT param)
Te6edf3addrTb4b4b4[T79c0ff5Tb4b4b4]Tb4b4b4, Te6edf3addrTb4b4b4[T79c0ff4Tb4b4b4]Tb4b4b4, Te6edf3addrTb4b4b4[T79c0ff3Tb4b4b4]Tb4b4b4, Te6edf3addrTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4, Te6edf3addrTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4, Te6edf3addrTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657char Te6edf3dev_nameTb4b4b4[T79c0ff32Tff7b72+T79c0ff16Tb4b4b4]Tb4b4b4;
Te6edf3sprintfTb4b4b4(Te6edf3dev_nameTb4b4b4, Ta5d6ff"Ta5d6ff%s%sTa5d6ff"Tb4b4b4, Te6edf3prefixTb4b4b4, Te6edf3nameTb4b4b4)Tb4b4b4;

T8b949e// Create the BLE Device
Te6edf3BLEDeviceTff7b72:Tff7b72:Te6edf3initTb4b4b4(Te6edf3dev_nameTb4b4b4)Tb4b4b4;
Te6edf3BLEDeviceTff7b72:Tff7b72:Te6edf3setSecurityCallbacksTb4b4b4(Tff7b72thisTb4b4b4)Tb4b4b4;
Te6edf3BLEDeviceTff7b72:Tff7b72:Te6edf3setMTUTb4b4b4(Te6edf3MAX_FRAME_SIZETb4b4b4)Tb4b4b4;

Te6edf3BLESecurity Te6edf3secTb4b4b4;
Te6edf3secTb4b4b4.Te6edf3setStaticPINTb4b4b4(Te6edf3pin_codeTb4b4b4)Tb4b4b4;
Te6edf3secTb4b4b4.Te6edf3setAuthenticationModeTb4b4b4(Te6edf3ESP_LE_AUTH_REQ_SC_MITM_BONDTb4b4b4)Tb4b4b4;

T8b949e//BLEDevice::setPower(ESP_PWR_LVL_N8);

T8b949e// Create the BLE Server
Te6edf3pServer Tff7b72= Te6edf3BLEDeviceTff7b72:Tff7b72:Te6edf3createServerTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3pServerTff7b72-Tff7b72>Te6edf3setCallbacksTb4b4b4(Tff7b72thisTb4b4b4)Tb4b4b4;

T8b949e// Create the BLE Service
Te6edf3pService Tff7b72= Te6edf3pServerTff7b72-Tff7b72>Te6edf3createServiceTb4b4b4(Te6edf3SERVICE_UUIDTb4b4b4)Tb4b4b4;

T8b949e// Create a BLE Characteristic
Te6edf3pTxCharacteristic Tff7b72= Te6edf3pServiceTff7b72-Tff7b72>Te6edf3createCharacteristicTb4b4b4(Te6edf3CHARACTERISTIC_UUID_TXTb4b4b4, Te6edf3BLECharacteristicTff7b72:Tff7b72:Te6edf3PROPERTY_READ Tff7b72| Te6edf3BLECharacteristicTff7b72:Tff7b72:Te6edf3PROPERTY_NOTIFYTb4b4b4)Tb4b4b4;
Te6edf3pTxCharacteristicTff7b72-Tff7b72>Te6edf3setAccessPermissionsTb4b4b4(Te6edf3ESP_GATT_PERM_READ_ENC_MITMTb4b4b4)Tb4b4b4;
Te6edf3pTxCharacteristicTff7b72-Tff7b72>Te6edf3addDescriptorTb4b4b4(Tff7b72new Te6edf3BLE2902Tb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;

Te6edf3BLECharacteristic Tff7b72* Te6edf3pRxCharacteristic Tff7b72= Te6edf3pServiceTff7b72-Tff7b72>Te6edf3createCharacteristicTb4b4b4(Te6edf3CHARACTERISTIC_UUID_RXTb4b4b4, Te6edf3BLECharacteristicTff7b72:Tff7b72:Te6edf3PROPERTY_WRITETb4b4b4)Tb4b4b4;
Te6edf3pRxCharacteristicTff7b72-Tff7b72>Te6edf3setAccessPermissionsTb4b4b4(Te6edf3ESP_GATT_PERM_WRITE_ENC_MITMTb4b4b4)Tb4b4b4;
Te6edf3pRxCharacteristicTff7b72-Tff7b72>Te6edf3setCallbacksTb4b4b4(Tff7b72thisTb4b4b4)Tb4b4b4;

Te6edf3pServerTff7b72-Tff7b72>Te6edf3getAdvertisingTb4b4b4(Tb4b4b4)Tff7b72-Tff7b72>Te6edf3addServiceUUIDTb4b4b4(Te6edf3SERVICE_UUIDTb4b4b4)Tb4b4b4;
Tb4b4b4}

T8b949e// -------- BLESecurityCallbacks methods

Tffa657uint32_t Td2a8ffSerialBLEInterface::onPassKeyRequestTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3BLE_DEBUG_PRINTLNTb4b4b4(Ta5d6ff"Ta5d6ffonPassKeyRequest()Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3_pin_codeTb4b4b4;
Tb4b4b4}

Tffa657void Td2a8ffSerialBLEInterface::onPassKeyNotifyTb4b4b4(Tffa657uint32_t Te6edf3pass_keyTb4b4b4) Tb4b4b4{
Te6edf3BLE_DEBUG_PRINTLNTb4b4b4(Ta5d6ff"Ta5d6ffonPassKeyNotify(%u)Ta5d6ff"Tb4b4b4, Te6edf3pass_keyTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tffa657bool Td2a8ffSerialBLEInterface::onConfirmPINTb4b4b4(Tffa657uint32_t Te6edf3pass_keyTb4b4b4) Tb4b4b4{
Te6edf3BLE_DEBUG_PRINTLNTb4b4b4(Ta5d6ff"Ta5d6ffonConfirmPIN(%u)Ta5d6ff"Tb4b4b4, Te6edf3pass_keyTb4b4b4)Tb4b4b4;
Tff7b72return Tffa657trueTb4b4b4;
Tb4b4b4}

Tffa657bool Td2a8ffSerialBLEInterface::onSecurityRequestTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3BLE_DEBUG_PRINTLNTb4b4b4(Ta5d6ff"Ta5d6ffonSecurityRequest()Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72return Tffa657trueTb4b4b4; T8b949e// allow
Tb4b4b4}

Tffa657void Td2a8ffSerialBLEInterface::onAuthenticationCompleteTb4b4b4(Te6edf3esp_ble_auth_cmpl_t Te6edf3cmplTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3cmplTb4b4b4.Te6edf3successTb4b4b4) Tb4b4b4{
Te6edf3BLE_DEBUG_PRINTLNTb4b4b4(Ta5d6ff"Ta5d6ff - SecurityCallback - Authentication SuccessTa5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3deviceConnected Tff7b72= Tffa657trueTb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3BLE_DEBUG_PRINTLNTb4b4b4(Ta5d6ff"Ta5d6ff - SecurityCallback - Authentication Failure*Ta5d6ff"Tb4b4b4)Tb4b4b4;

T8b949e//pServer->removePeerDevice(pServer->getConnId(), true);
Te6edf3pServerTff7b72-Tff7b72>Te6edf3disconnectTb4b4b4(Te6edf3pServerTff7b72-Tff7b72>Te6edf3getConnIdTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3adv_restart_time Tff7b72= Te6edf3millisTb4b4b4(Tb4b4b4) Tff7b72+ Te6edf3ADVERT_RESTART_DELAYTb4b4b4;
Tb4b4b4}
Tb4b4b4}

T8b949e// -------- BLEServerCallbacks methods

Tffa657void Td2a8ffSerialBLEInterface::onConnectTb4b4b4(Te6edf3BLEServerTff7b72* Te6edf3pServerTb4b4b4) Tb4b4b4{
Tb4b4b4}

Tffa657void Td2a8ffSerialBLEInterface::onConnectTb4b4b4(Te6edf3BLEServerTff7b72* Te6edf3pServerTb4b4b4, Te6edf3esp_ble_gatts_cb_param_t Tff7b72*Te6edf3paramTb4b4b4) Tb4b4b4{
Te6edf3BLE_DEBUG_PRINTLNTb4b4b4(Ta5d6ff"Ta5d6ffonConnect(), conn_id=%d, mtu=%dTa5d6ff"Tb4b4b4, Te6edf3paramTff7b72-Tff7b72>Te6edf3connectTb4b4b4.Te6edf3conn_idTb4b4b4, Te6edf3pServerTff7b72-Tff7b72>Te6edf3getPeerMTUTb4b4b4(Te6edf3paramTff7b72-Tff7b72>Te6edf3connectTb4b4b4.Te6edf3conn_idTb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3last_conn_id Tff7b72= Te6edf3paramTff7b72-Tff7b72>Te6edf3connectTb4b4b4.Te6edf3conn_idTb4b4b4;
Tb4b4b4}

Tffa657void Td2a8ffSerialBLEInterface::onMtuChangedTb4b4b4(Te6edf3BLEServerTff7b72* Te6edf3pServerTb4b4b4, Te6edf3esp_ble_gatts_cb_param_tTff7b72* Te6edf3paramTb4b4b4) Tb4b4b4{
Te6edf3BLE_DEBUG_PRINTLNTb4b4b4(Ta5d6ff"Ta5d6ffonMtuChanged(), mtu=%dTa5d6ff"Tb4b4b4, Te6edf3pServerTff7b72-Tff7b72>Te6edf3getPeerMTUTb4b4b4(Te6edf3paramTff7b72-Tff7b72>Te6edf3mtuTb4b4b4.Te6edf3conn_idTb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tffa657void Td2a8ffSerialBLEInterface::onDisconnectTb4b4b4(Te6edf3BLEServerTff7b72* Te6edf3pServerTb4b4b4) Tb4b4b4{
Te6edf3BLE_DEBUG_PRINTLNTb4b4b4(Ta5d6ff"Ta5d6ffonDisconnect()Ta5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3deviceConnected Tff7b72= Tffa657falseTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3_isEnabledTb4b4b4) Tb4b4b4{
Te6edf3adv_restart_time Tff7b72= Te6edf3millisTb4b4b4(Tb4b4b4) Tff7b72+ Te6edf3ADVERT_RESTART_DELAYTb4b4b4;
Tb4b4b4}
Tb4b4b4}

T8b949e// -------- BLECharacteristicCallbacks methods

Tffa657void Td2a8ffSerialBLEInterface::onWriteTb4b4b4(Te6edf3BLECharacteristicTff7b72* Te6edf3pCharacteristicTb4b4b4, Te6edf3esp_ble_gatts_cb_param_tTff7b72* Te6edf3paramTb4b4b4) Tb4b4b4{
Tffa657uint8_tTff7b72* Te6edf3rxValue Tff7b72= Te6edf3pCharacteristicTff7b72-Tff7b72>Te6edf3getDataTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657int Te6edf3len Tff7b72= Te6edf3pCharacteristicTff7b72-Tff7b72>Te6edf3getLengthTb4b4b4(Tb4b4b4)Tb4b4b4;

Tff7b72if Tb4b4b4(Te6edf3len Tff7b72> Te6edf3MAX_FRAME_SIZETb4b4b4) Tb4b4b4{
Te6edf3BLE_DEBUG_PRINTLNTb4b4b4(Ta5d6ff"Ta5d6ffERROR: onWrite(), frame too big, len=%dTa5d6ff"Tb4b4b4, Te6edf3lenTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3Frame Te6edf3frame Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4;
Te6edf3frameTb4b4b4.Te6edf3len Tff7b72= Te6edf3lenTb4b4b4;
Te6edf3memcpyTb4b4b4(Te6edf3frameTb4b4b4.Te6edf3bufTb4b4b4, Te6edf3rxValueTb4b4b4, Te6edf3lenTb4b4b4)Tb4b4b4;

Tff7b72if Tb4b4b4(Te6edf3xQueueSendTb4b4b4(Te6edf3recv_queueTb4b4b4, Tff7b72&Te6edf3frameTb4b4b4, T79c0ff0Tb4b4b4) Tff7b72!Tff7b72= Te6edf3pdTRUETb4b4b4) Tb4b4b4{
Te6edf3BLE_DEBUG_PRINTLNTb4b4b4(Ta5d6ff"Ta5d6ffERROR: onWrite(), recv_queue is full!Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

T8b949e// ---------- public methods

Tffa657void Td2a8ffSerialBLEInterface::clearBuffersTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3xQueueResetTb4b4b4(Te6edf3recv_queueTb4b4b4)Tb4b4b4;
Te6edf3send_queue_len Tff7b72= T79c0ff0Tb4b4b4;
Tb4b4b4}

Tffa657void Td2a8ffSerialBLEInterface::enableTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3_isEnabledTb4b4b4) Tff7b72returnTb4b4b4;

Te6edf3_isEnabled Tff7b72= Tffa657trueTb4b4b4;
Te6edf3clearBuffersTb4b4b4(Tb4b4b4)Tb4b4b4;

T8b949e// Start the service
Te6edf3pServiceTff7b72-Tff7b72>Te6edf3startTb4b4b4(Tb4b4b4)Tb4b4b4;

T8b949e// Start advertising

T8b949e//pServer->getAdvertising()->setMinInterval(500);
T8b949e//pServer->getAdvertising()->setMaxInterval(1000);

Te6edf3pServerTff7b72-Tff7b72>Te6edf3getAdvertisingTb4b4b4(Tb4b4b4)Tff7b72-Tff7b72>Te6edf3startTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3adv_restart_time Tff7b72= T79c0ff0Tb4b4b4;
Tb4b4b4}

Tffa657void Td2a8ffSerialBLEInterface::disableTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3_isEnabled Tff7b72= Tffa657falseTb4b4b4;

Te6edf3BLE_DEBUG_PRINTLNTb4b4b4(Ta5d6ff"Ta5d6ffSerialBLEInterface::disableTa5d6ff"Tb4b4b4)Tb4b4b4;

Te6edf3pServerTff7b72-Tff7b72>Te6edf3getAdvertisingTb4b4b4(Tb4b4b4)Tff7b72-Tff7b72>Te6edf3stopTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3pServerTff7b72-Tff7b72>Te6edf3disconnectTb4b4b4(Te6edf3last_conn_idTb4b4b4)Tb4b4b4;
Te6edf3pServiceTff7b72-Tff7b72>Te6edf3stopTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3oldDeviceConnected Tff7b72= Te6edf3deviceConnected Tff7b72= Tffa657falseTb4b4b4;
Te6edf3adv_restart_time Tff7b72= T79c0ff0Tb4b4b4;
Tb4b4b4}

Tffa657size_t Td2a8ffSerialBLEInterface::writeFrameTb4b4b4(Tff7b72const Tffa657uint8_t Te6edf3srcTb4b4b4[Tb4b4b4]Tb4b4b4, Tffa657size_t Te6edf3lenTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3len Tff7b72> Te6edf3MAX_FRAME_SIZETb4b4b4) Tb4b4b4{
Te6edf3BLE_DEBUG_PRINTLNTb4b4b4(Ta5d6ff"Ta5d6ffwriteFrame(), frame too big, len=%dTa5d6ff"Tb4b4b4, Te6edf3lenTb4b4b4)Tb4b4b4;
Tff7b72return T79c0ff0Tb4b4b4;
Tb4b4b4}

Tff7b72if Tb4b4b4(Te6edf3deviceConnected Tff7b72&Tff7b72& Te6edf3len Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3send_queue_len Tff7b72>Tff7b72= Te6edf3FRAME_QUEUE_SIZETb4b4b4) Tb4b4b4{
Te6edf3BLE_DEBUG_PRINTLNTb4b4b4(Ta5d6ff"Ta5d6ffwriteFrame(), send_queue is full!Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72return T79c0ff0Tb4b4b4;
Tb4b4b4}

Te6edf3send_queueTb4b4b4[Te6edf3send_queue_lenTb4b4b4]Tb4b4b4.Te6edf3len Tff7b72= Te6edf3lenTb4b4b4; T8b949e// add to send queue
Te6edf3memcpyTb4b4b4(Te6edf3send_queueTb4b4b4[Te6edf3send_queue_lenTb4b4b4]Tb4b4b4.Te6edf3bufTb4b4b4, Te6edf3srcTb4b4b4, Te6edf3lenTb4b4b4)Tb4b4b4;
Te6edf3send_queue_lenTff7b72+Tff7b72+Tb4b4b4;

Tff7b72return Te6edf3lenTb4b4b4;
Tb4b4b4}
Tff7b72return T79c0ff0Tb4b4b4;
Tb4b4b4}

Tff7b72#Tff7b72define BLE_WRITE_MIN_INTERVAL 60

Tffa657bool Td2a8ffSerialBLEInterface::isWriteBusyTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{
Tff7b72return Te6edf3millisTb4b4b4(Tb4b4b4) Tff7b72< Te6edf3_last_write Tff7b72+ Te6edf3BLE_WRITE_MIN_INTERVALTb4b4b4; T8b949e// still too soon to start another write?
Tb4b4b4}

Tffa657size_t Td2a8ffSerialBLEInterface::checkRecvFrameTb4b4b4(Tffa657uint8_t Te6edf3destTb4b4b4[Tb4b4b4]Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3send_queue_len Tff7b72> T79c0ff0 T8b949e// first, check send queue
Tff7b72&Tff7b72& Te6edf3millisTb4b4b4(Tb4b4b4) Tff7b72>Tff7b72= Te6edf3_last_write Tff7b72+ Te6edf3BLE_WRITE_MIN_INTERVAL T8b949e// space the writes apart
Tb4b4b4) Tb4b4b4{
Te6edf3_last_write Tff7b72= Te6edf3millisTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3pTxCharacteristicTff7b72-Tff7b72>Te6edf3setValueTb4b4b4(Te6edf3send_queueTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4.Te6edf3bufTb4b4b4, Te6edf3send_queueTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4.Te6edf3lenTb4b4b4)Tb4b4b4;
Te6edf3pTxCharacteristicTff7b72-Tff7b72>Te6edf3notifyTb4b4b4(Tb4b4b4)Tb4b4b4;

Te6edf3BLE_DEBUG_PRINTLNTb4b4b4(Ta5d6ff"Ta5d6ffwriteBytes: sz=%d, hdr=%dTa5d6ff"Tb4b4b4, Tb4b4b4(Tffa657uint32_tTb4b4b4)Te6edf3send_queueTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4.Te6edf3lenTb4b4b4, Tb4b4b4(Tffa657uint32_tTb4b4b4) Te6edf3send_queueTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4.Te6edf3bufTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)Tb4b4b4;

Te6edf3send_queue_lenTff7b72-Tff7b72-Tb4b4b4;
Tff7b72for Tb4b4b4(Tffa657int Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3send_queue_lenTb4b4b4; Te6edf3iTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{ T8b949e// delete top item from queue
Te6edf3send_queueTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= Te6edf3send_queueTb4b4b4[Te6edf3i Tff7b72+ T79c0ff1Tb4b4b4]Tb4b4b4;
Tb4b4b4}
Tb4b4b4}

Te6edf3Frame Te6edf3frameTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3xQueueReceiveTb4b4b4(Te6edf3recv_queueTb4b4b4, Tff7b72&Te6edf3frameTb4b4b4, T79c0ff0Tb4b4b4) Tff7b72=Tff7b72= Te6edf3pdTRUETb4b4b4) Tb4b4b4{
Te6edf3memcpyTb4b4b4(Te6edf3destTb4b4b4, Te6edf3frameTb4b4b4.Te6edf3bufTb4b4b4, Te6edf3frameTb4b4b4.Te6edf3lenTb4b4b4)Tb4b4b4;
Te6edf3BLE_DEBUG_PRINTLNTb4b4b4(Ta5d6ff"Ta5d6ffreadBytes: sz=%d, hdr=%dTa5d6ff"Tb4b4b4, Tb4b4b4(Tffa657uint32_tTb4b4b4) Te6edf3frameTb4b4b4.Te6edf3lenTb4b4b4, Tb4b4b4(Tffa657uint32_tTb4b4b4) Te6edf3destTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3frameTb4b4b4.Te6edf3lenTb4b4b4;
Tb4b4b4}

Tff7b72if Tb4b4b4(Te6edf3deviceConnected Tff7b72!Tff7b72= Te6edf3oldDeviceConnectedTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3deviceConnectedTb4b4b4) Tb4b4b4{ T8b949e// disconnecting
Te6edf3clearBuffersTb4b4b4(Tb4b4b4)Tb4b4b4;

Te6edf3BLE_DEBUG_PRINTLNTb4b4b4(Ta5d6ff"Ta5d6ffSerialBLEInterface -> disconnecting...Ta5d6ff"Tb4b4b4)Tb4b4b4;

T8b949e//pServer->getAdvertising()->setMinInterval(500);
T8b949e//pServer->getAdvertising()->setMaxInterval(1000);

Te6edf3adv_restart_time Tff7b72= Te6edf3millisTb4b4b4(Tb4b4b4) Tff7b72+ Te6edf3ADVERT_RESTART_DELAYTb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3BLE_DEBUG_PRINTLNTb4b4b4(Ta5d6ff"Ta5d6ffSerialBLEInterface -> stopping advertisingTa5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3BLE_DEBUG_PRINTLNTb4b4b4(Ta5d6ff"Ta5d6ffSerialBLEInterface -> connecting...Ta5d6ff"Tb4b4b4)Tb4b4b4;
T8b949e// connecting
T8b949e// do stuff here on connecting
Te6edf3pServerTff7b72-Tff7b72>Te6edf3getAdvertisingTb4b4b4(Tb4b4b4)Tff7b72-Tff7b72>Te6edf3stopTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3adv_restart_time Tff7b72= T79c0ff0Tb4b4b4;
Tb4b4b4}
Te6edf3oldDeviceConnected Tff7b72= Te6edf3deviceConnectedTb4b4b4;
Tb4b4b4}

Tff7b72if Tb4b4b4(Te6edf3adv_restart_time Tff7b72&Tff7b72& Te6edf3millisTb4b4b4(Tb4b4b4) Tff7b72>Tff7b72= Te6edf3adv_restart_timeTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3pServerTff7b72-Tff7b72>Te6edf3getConnectedCountTb4b4b4(Tb4b4b4) Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3BLE_DEBUG_PRINTLNTb4b4b4(Ta5d6ff"Ta5d6ffSerialBLEInterface -> re-starting advertisingTa5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3pServerTff7b72-Tff7b72>Te6edf3getAdvertisingTb4b4b4(Tb4b4b4)Tff7b72-Tff7b72>Te6edf3startTb4b4b4(Tb4b4b4)Tb4b4b4; T8b949e// re-Start advertising
Tb4b4b4}
Te6edf3adv_restart_time Tff7b72= T79c0ff0Tb4b4b4;
Tb4b4b4}
Tff7b72return T79c0ff0Tb4b4b4;
Tb4b4b4}

Tffa657bool Td2a8ffSerialBLEInterface::isConnectedTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{
Tff7b72return Te6edf3deviceConnectedTb4b4b4; T8b949e//pServer != NULL && pServer->getConnectedCount() > 0;
Tb4b4b4}

Served by rngit 1.5.0 - Generated in 0.12s